# Android.mk 文件模版 及 注释
# Android.mk 编译 c++ 共享库
# https://developer.android.google.cn/ndk/guides/android_mk?hl=zh-cn
# Android.mk 文件一般存放在 jni 工程下
# 用于向构建形同描述源文件 和 共享库. 实际上就是一个 微小的 makefile 片段
# 系统 会 解析 一次 或者多次 该文件
# Android.mk 文件 用于 定义 Application.mk, 构建系统, 和环境变量 所未定义的 项目级别配置
# Android.mk 文件 还可以替换特定模块的 项目级别配置

# 支持 将源文件 分组 为模块, 模块是 静态库, 共享库, 或独立的可执行文件.


# Android.mk 文件 必须 最先定义 LOCAL_PATH 变量, 通常指向当前所在目录
LOCAL_PATH:= $(call my-dir)

# 声明 CLEAR_VARS 变量
# CLEAR_VARS 指向 一个 特殊的 GNU Makefile, 后者可以 清除许多 LOCAL_XXX 变量,
include $(CLEAR_VARS)


# 模块名称 模块名称必须唯一, 命名不能包含 空格,
# 构建系统在生成最终共享库时, 会自动增加 前缀( lib )和 后缀 ( .so )
# 已经以 lib 开头的 模块名称不会再增加 前缀
LOCAL_MODULE := libnative

# 列举 源文件 使用 空格分隔多个文件, 只有这里列举 过的源文件, 才会被构建到模块中
LOCAL_SRC_FILES := native-lib.cpp


# 头文件

LOCAL_LDFLAGS := -llog

LOCAL_MODULE_TAGS := optional


LOCAL_PRODUCT_MODULE := true



LOCAL_SDK_VERSION := 21

# 构建 目标共享库 生成 .so 文件
# 帮助系统 将一切文件 连接 到一起
# BUILD_SHARED_LIBRARY 变量 指向一个 GNU Makefile 脚本, 该脚本会收集 include 以来,
# 在 LOCAL_XXX 变量中定义的所有信息, 然后 确认要构建的内容 以及 构建方式
include $(BUILD_SHARED_LIBRARY)

# 预构建 共享库
# 指向 用于 指定预构建共享库的 构建脚本
# LOCAL_SRC_FILES 值 不能是 源文件, 必须是指向预构建共享库的 单一路径
include $(PREBUILD_SHARED_LIBRARY)


# 构建 目标静态库 生成 .a 文件
include $(BUILD_STATIC_LIBRARY)

# 预构建 静态库
include $(PREBUILD_STATIC_LIBRARY)

# 构建 目标可执行文件 
# 使用前要确保 LOCAL_MODULE 和 LOCAL_SRC_FILES 赋值
include $(BUOLD_EXECUTABLE)


# 相关字段说明

# 构建系统解析此 Android.mk 文件时, 指向的 CPU 系列. arm, arm64, x86, x86_64
# TARGET_ARCH

# 构建系统解析此 Android.mk 文件时, 指向的 Android API 级别号. 22 -> android-22
# TARGET_PLATFORM

# 构建系统解析此 Android.mk 文件时, 指向的 ABI. 
# CPU和架构      	 设置
# ARMv7         	armeabi-v7a
# ARMv8 AArch64 	arm64-v8a
# i686				x86
# x86-64			x86_64
ifeq ($(TARGET_ARCH_ABI), arm64-v8a)
# ... user commoned
endif

# 针对指定 版本进行编译时
# TARGET_ABI


# 模块描述变量

# ** 每个模块描述 都应该 遵守 以下基本流程
# 1. 使用 CLEAR_VARS 变量初始化 或 取消定义 与 模块相关的变量
# 2. 为用于 描述模块 的变量赋值
# 3. 使用 BUILD_XXX 变量 设置 NDK 构建系统, 使其将 适当的构建脚本 用于该模块

# 指定 当前文件 的路径. 必须在文件开头 定义 此变量. CLEAR_VARS 不会清除 此变量
# LOCAL_PATH := $(call my-dir)

# 存储 模块名称
# LOCAL_MODULE := modulename

# 替换 构建系统 生成的 文件名称 * 会覆盖 LOCAL_MODULE 的变量设置
# LOCAL_MODULE_FILENAME := modulename

# 指定 构建系统 生成模块 时 使用的 源文件列表
# LOCAL_SRC_FILES := xx.cpp

# 使用 此变量 为 c++ 源文件 指定 .cpp 以外的 文件拓展名, 可以指定多个 拓展名
# LOCAL_CPP_EXTENSION := .cc .cpp .cxx


# 指定 代码 依赖于特定 C++ 功能. 
# rtti : 指明代码使用 RTTI (运行时类型信息)
# ecxeptions : 指明代码使用 C++ 异常
# LOCAL_CPP_FEATURES :=


# 

